package com.lagerplan.main;

import java.util.ArrayList;

import org.apache.log4j.Logger;

import util.logging.LogLoader;

import com.lagerplan.basisdienste.stammdaten.data.ArtikelTO;
import com.lagerplan.basisdienste.stammdaten.data.LagermittelTO;
import com.lagerplan.basisdienste.stammdaten.data.TransporthilfsmittelTO;
import com.lagerplan.basisdienste.stammdaten.data.TransportmittelTO;
import com.lagerplan.basisdienste.stammdaten.persistence.ArtikelDAO;
import com.lagerplan.basisdienste.stammdaten.persistence.LagermittelDAO;
import com.lagerplan.basisdienste.stammdaten.persistence.TransporthilfsmittelDAO;
import com.lagerplan.basisdienste.stammdaten.persistence.TransportmittelDAO;
import com.lagerplan.basisdienste.util.persistence.ExcelDB;
import com.lagerplan.basisdienste.util.persistence.SQliteDB;

/**
 * Lagerplan Commandozeile
 * @author MIFE
 *
 */
public class LagerplanCommand {

	// Logging what's going on
	private static Logger logger = Logger.getLogger( LagerplanCommand.class );
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		try {
			initialize();
			
			ArtikelDAO artikelDAO = new ArtikelDAO();
			ArrayList<ArtikelTO> artikelstamm = artikelDAO.getArtikel();
			TransporthilfsmittelDAO thmDAO = new TransporthilfsmittelDAO();
			ArrayList<TransporthilfsmittelTO> thmCollection = thmDAO.getTransporthilfsmittel();
			
			TransportmittelDAO transportmittelDAO = new TransportmittelDAO();
			ArrayList<TransportmittelTO> transportmittel = transportmittelDAO.getTransportmittelByKlassifizierung(10);
			
			LagermittelDAO lagermittelDAO = new LagermittelDAO();
			ArrayList<LagermittelTO> lagermittel = lagermittelDAO.getLagermittelByKlassifizierung(1);
			
			
			/*
			Hashtable<String, KOkriteriumTO> test = WissensdatenbankDAO.getKoKriterienTm();
			LagermittelCollection testl = WissensdatenbankDAO.getLagermittel();
			TransportmittelCollection testt = WissensdatenbankDAO.getTransportmittel();
			*/
			
			/*
			KOKriterien koKriterien = new KOKriterien();
			koKriterien.buildInitialKOKriterien();
			QuantitativeKriterien quantitativeKriterien = new QuantitativeKriterien();
			quantitativeKriterien.buildInitialQuantitativeKriterien();
			LMAuswahlControl lc = new LMAuswahlControl(koKriterien, quantitativeKriterien);
			lc.run();
			*/
			
			/*
			ClusterControl clusterControl = new ClusterControl(	thmCollection,
																artikelstamm,
																new GewichtsfaktorenCfg());
			
			clusterControl.run();
			*/
			
			//ClusterControl clusterControl = new ClusterControl();
			//clusterControl.testClusterAnalysis();
			
			//RippleCarryCounter rpc = new RippleCarryCounter(3,3);
			//rpc.countUntilMax();
			// 0 1 2 3 4 5 6 7
			/*for(int i = 0; i < 7; i++){
				
				for(int j = 0; j < 3; j++){
					
					for(int k = 0; k < 3; k++){
						logger.debug(" " + i + j + k + " ");
					}
				}
			}*/
			
			logger.info("fertsch");
		} catch (Exception e) {
			logger.error("(main) Error: " +e.getMessage());
		}
	}

	/**
	 * Initialize important Stuff
	 * @throws Exception
	 */
	public static void initialize() throws Exception
    {
		// set to true for debug
        //LogLoader.setTraceLogLoader(true);
		System.out.println("Lagerplan - Initialising log4j SYSTEM...");	
        LogLoader.publicLogInit();
        System.out.println("Lagerplan - DONE Initialising log4j SYSTEM...");
        
        // initialize Databases
		logger.info("Initializing EXCEL Database...");
        try
        {
        	ExcelDB.getInstance();
            logger.info("Initializing EXCEL Database finished.");
        }
        catch (Exception e)
        {
            logger.error("Exception caught while initializing ExcelDB class: " + e.getClass().getName() + ": " + e.getMessage());
        }
        // initialize Databases
		logger.info("Initializing SQLITE Database...");
        try
        {
        	SQliteDB.getInstance();
            logger.info("Initializing SQLITE Database finished.");
        }
        catch (Exception e)
        {
            logger.error("Exception caught while initializing ExcelDB class: " + e.getClass().getName() + ": " + e.getMessage());
        }
    }
}
